package Negocio;

import java.util.ArrayList;
import java.util.List;

import DTO.DTO_Comision;
import DTO.DTO_Mesa;
import DTO.DTO_MesaComposite;
import DTO.DTO_MesaSimple;
import DTO.DTO_Mozo;
import Entities.Entity_Comision;
import Entities.Entity_Mesa;
import Entities.Entity_Mozo;

public class Mozo extends Empleado {

	private float porcentajeComision;
	private List<Comision> comision;
	private List<Mesa> mesas;

	// Constructores
	public Mozo(int idempleado, String nombre, String apellido,
			String direccion, float sueldo, float porcentajeComision,
			List<Comision> comisiones, List<Mesa> mesas) {
		super(idempleado, nombre, apellido, direccion, sueldo);
		this.porcentajeComision = porcentajeComision;
		this.comision = new ArrayList<Comision>();
		this.mesas = new ArrayList<Mesa>();
	}

	public Mozo() {
	}

	public Mozo(DTO_Mozo mozo) {
		super(mozo);
		this.porcentajeComision = mozo.getPorcentajeComision();
		this.comision = new ArrayList<Comision>();
		this.mesas = new ArrayList<Mesa>();
		for (DTO_Comision e : mozo.getComisiones()) {
			Comision com_aux = new Comision(e);
			comision.add(com_aux);
		}
		for (DTO_Mesa e : mozo.getMesas()) {
			if (e instanceof DTO_MesaSimple) {
				this.mesas.add(new MesaSimple((DTO_MesaSimple) e));
			} else {
				this.mesas.add(new MesaComposite((DTO_MesaComposite) e));
			}

		}
	}
	
	public Mozo(Entity_Mozo mozo) {
		super(mozo);
		this.porcentajeComision = mozo.getPorcentajeComision();
		this.comision = new ArrayList<Comision>();
		this.mesas = new ArrayList<Mesa>();
		for (Entity_Comision e : mozo.getComision()) {
			Comision com_aux = new Comision(e);
			comision.add(com_aux);
		}
		for (Entity_Mesa e : mozo.getMesas()) {
			this.mesas.add(new MesaSimple(e));

		}
	}

	// GET & List
	public float getPorcentajeComision() {
		return porcentajeComision;
	}

	public void ListPorcentajeComision(float porcentajeComision) {
		this.porcentajeComision = porcentajeComision;
	}

	public List<Mesa> getMesas() {
		return mesas;
	}

	public void ListMesas(List<Mesa> mesas) {
		this.mesas = mesas;
	}

	public void setPorcentajeComision(float porcentajeComision) {
		this.porcentajeComision = porcentajeComision;
		comision = null;
	}

	public void setMesas(List<Mesa> mesas) {
		this.mesas = mesas;
	}

	public List<Comision> getComision() {
		return comision;
	}

	public void setComision(List<Comision> comision) {
		this.comision = comision;
	}

	// METODOS DE NEGOCIO
	public boolean sosMozo() {
		return true;
	}

	public int cantMesasMozo() {
		return mesas.size();
	}

	@Override
	public DTO_Mozo toDTO() {
		DTO_Mozo m = new DTO_Mozo();
		m.setApellido(apellido);
		List<DTO_Comision> aux_com = new ArrayList<DTO_Comision>();
		for (Comision e : comision) {
			aux_com.add(e.toDTO());
		}
		m.setComisiones(aux_com);
		m.setDireccion(direccion);
		m.setIdempleado(idempleado);
		m.setNombre(nombre);
		m.setPorcentajeComision(porcentajeComision);
		m.setSueldo(porcentajeComision);
		List<DTO_Mesa> aux_mesa = new ArrayList<DTO_Mesa>();
		for (Mesa e : mesas) {
			aux_mesa.add(e.toDTO());
		}
		m.setMesas(aux_mesa);
		return m;
	}

	@Override
	public Entity_Mozo toEntity() {
		Entity_Mozo m = new Entity_Mozo();
		m.setApellido(this.apellido);
		List<Entity_Comision> aux_com = new ArrayList<Entity_Comision>();
		for (Comision e : comision) {
			aux_com.add(e.toEntity());
		}
		m.setComision(aux_com);
		m.setDireccion(direccion);
		m.setIdempleado(idempleado);
		m.setNombre(nombre);
		m.setPorcentajeComision(porcentajeComision);
		m.setSueldo(porcentajeComision);
		List<Entity_Mesa> aux_mesa = new ArrayList<Entity_Mesa>();
		for (Mesa e : mesas) {
			aux_mesa.add(((MesaSimple)e).toEntity());
		}
		m.setMesas(aux_mesa);
		return m;
	}

}
